package org.zjt.ds;

/**
 * @author juntao.zhang
 * @version V1.0
 * @Description: 汉诺塔的挪动问题.(每次确定第top个的位置到目标塔，并保持位置不变。)
 * @Package org.zjt.ds
 * @date 2018/4/22 15:46
 */
public class HNTower {

    public static void main(String[] args) {
        moveTowerElement(3,"塔A","塔B","塔C");
    }


    /**
     * 每次一个递归，将移动top到目标塔的底部。并不做变化。（第top个确定位置，逐级向上）
     * @param top
     * @param towerSource
     * @param towerInter
     * @param towerTo
     */
    public static void moveTowerElement(Integer top,String towerSource,String towerInter,String towerTo) {
        if (top == 1)
            System.out.println(String.format("disk %s from %s to %s",top,towerSource,towerTo));
        else {
            // 将前top个盘子移动到中介塔上。
            moveTowerElement(top -1 ,towerSource,towerTo,towerInter);

            // 移动最下面的一个盘子到最终目标塔上。
            System.out.println(String.format("disk %s from %s to %s",top,towerSource,towerTo));

            // 将中介塔上的移动到目标塔上
            moveTowerElement(top -1 ,towerInter,towerSource,towerTo);
        }

    }
}
